/**
 * 
 */
package fr.gfi.agraf.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import fr.gfi.agraf.exception.AgrafException;
import fr.gfi.agraf.persistence.dao.IEtatDAO;
import fr.gfi.agraf.service.ICommunService;
import fr.gfi.agraf.service.IComposantService;
import fr.gfi.agraf.service.IProfilService;
import fr.gfi.agraf.service.ITacheService;
import fr.gfi.agraf.service.IUtilisateurService;
import fr.gfi.agraf.service.mapper.EtatMapper;
import fr.gfi.agraf.vue.bean.CommunDTO;
import fr.gfi.agraf.vue.bean.EtatDTO;
import fr.gfi.agraf.vue.bean.TacheDTO;
import fr.gfi.agraf.vue.bean.UtilisateurDTO;

/**
 * @author Zakaria
 * 
 */
@Service("CommunService")
@Transactional(propagation = Propagation.REQUIRED)
public class CommunService implements ICommunService {

	@Autowired
	private IProfilService profilService;

	@Autowired
	private IComposantService composantService;

	@Autowired
	private ITacheService tacheService;

	@Autowired
	private IEtatDAO etatDAO;

	@Autowired
	private IUtilisateurService utilisateurService;

	/*
	 * (non-Javadoc)
	 * 
	 * @see fr.gfi.agraf.service.ICommunService#getProfilAndComposant()
	 */
	public CommunDTO getProfilAndComposant() throws AgrafException {
		final CommunDTO communDTO = new CommunDTO();
		communDTO.setProfilList(profilService.getAllProfil());
		communDTO.setComposantList(composantService.getAllComposant());
		return communDTO;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * fr.gfi.agraf.service.ICommunService#getListeTacheByActiviteAndUtilisateur
	 * (java.lang.Long, java.lang.Long, java.util.Date)
	 */
	public CommunDTO getListeTacheByActiviteAndUtilisateur(final Long idActivite, final Long idUtilisateur,
			final Date date) throws AgrafException {
		final CommunDTO communDTO = new CommunDTO();
		final List<TacheDTO> tacheList = tacheService.getListeTacheByActiviteAndUtilisateur(idActivite,
				idUtilisateur, date);

		final List<EtatDTO> etatList = EtatMapper.entityToDTOList(etatDAO.getAllEtatsAvailable());
		
		// Dans le cas ou l'utilisateur est null, j'ajoute la liste des
		// utilisateurs utile sur la page d'administration des taches
		if (idUtilisateur == null) {
			List<UtilisateurDTO> utilisateurActifList;
			try {
				utilisateurActifList = utilisateurService.getAllUtilisateurActif();
			} catch (final AgrafException e) {
				throw e;
			}
			communDTO.setUtilisateurActifList(utilisateurActifList);
		}

		communDTO.setTacheList(tacheList);
		communDTO.setEtatList(etatList);
		return communDTO;
	}
}
